#ifndef __CC_LIST_H__
#define __CC_LIST_H__

#include "cc_portable.h"

#define cc_list_foreach(list)               for (size_t list_index = 0; list_index < cc_list_get_length(list); list_index++)
#define cc_list_node_set_entry(item, owner) listSET_LIST_ITEM_OWNER(item, owner)
#define cc_list_get_entry(list, data)       listGET_OWNER_OF_NEXT_ENTRY(data, list)

int cc_list_init(cc_list* list);
int cc_list_node_init(cc_list_node* node);
uint32_t cc_list_get_length(cc_list* list);
int cc_list_insert_after(cc_list* list, cc_list_node* node);
int cc_list_remove(cc_list_node* node);
int cc_list_isempty(cc_list* list);
int cc_list_deinit(cc_list* list);
int cc_list_reinit(cc_list* list);
int cc_list_is_init(cc_list* list);

#endif